package com.ctsi.security;

import com.ctsi.commons.util.response.Page;
import com.ctsi.security.domain.DataObject;

import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * 获取用户的数据权限id<p>
 * 这些id默认为用户配置，但是对于简单的按照组织隔离，可以直接映射到独立组织之上
 * @author yueming
 *
 */
public interface FetchObjIds {
	
	/**
	 * 扩展的key,平台用这个key区分不同的扩展,要求key组成: 产品名称_自定义部分
	 * @return
	 */
	public String getKey() ;
	/**
	 * 获取用户在指定类型上的数据权限id,
	 * @param userLoginId 用户登录id
	 * @param doTypeId 数据对象类型
	 * @param action 操作
	 * @return
	 */
	public  Set<String> getDataObjectIdsByCache(String userLoginId, String doTypeId, String action);

	/**
	 *获取用户在指定类型上的数据权限MAP
	 * @param userLoginId 用户登录ID
	 * @param doType 数据对象类型
	 * @param action 操作
	 * @return 返回以数据对象ID为KEY，数据对象为Value的MAP
	 */
	public  Map<String, DataObject> getDataObject(String userLoginId, String doType, String action);
	
	
	/**
	 * true 使用角色管理数据对象，false使用以上方法控制数据对象
	 * 如果 使用 true 则需要实现queryDataObject,queryDataObjectPage方法
	 * 如果使用 false 则需要实现 getDataObjectIdsByCache ,getDataObject
	 * 
	 * @return
	 */		
	public boolean isUserRole();
	
	/**
	 * 获取数据对象 当 parent为typeid时取顶层 
	 * @param typeId
	 * @param parent
	 * @return
	 */
	public List<DataObject> queryDataObject(String typeId, String parent);
	
	
	/**
	 * 分页查询数据对象
	 * @param typeId
	 * @param param
	 * @param start
	 * @param pageSize
	 * @return
	 */
	public Page<DataObject> queryDataObjectPage(String typeId, Map<String, Object> param, int start, int pageSize);
	
	public DataObject findDataObjectById(String id, String typeId);
	
	
	
	

}
